package com.gupao.singleton.seriable;

import java.io.Serializable;

/**
 * 反序列化时会破坏单例，重写readResolve方法就会避免反序列化被破坏
 * 具体是调用了readObject方法时才会创建新的对象
 */
public class SeriableSingleton implements Serializable {

    private static final SeriableSingleton seriableSingleton = new SeriableSingleton();

    private SeriableSingleton(){}

    public static SeriableSingleton getInstance(){
        return seriableSingleton;
    }

    //重写readResolve避免序列化反序列化后导致的单例被破坏的问题，
    //重写readResolve后虽然保证单例不被破坏，但是在readObject的内部是会创建一个对象，导致占用资源，使用注册式单例能完美解决序列化反序列化问题
    private Object readResolve(){
        return seriableSingleton;
    }
}
